#include <bits/stdc++.h>
using namespace std;
#define IOS() ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define int long long
#define pb(x) push_back(x)
#define mp make_pair
#define fir first
#define se second
int a[200005],s[200005],a1[200005],dp[200005][2],lst[200005],vis[1000005];
// struct Segment{
//     struct tree{
//         int v;
//     }tr[400005];
//     #define ls x<<1
//     #define rs x<<1|1
//     void pushup(int x){
//         tr[x].v=max(tr[ls].v,tr[rs].v);
//     }
//     void build(int x,int l,int r){
//         if(l==r){
//             tr[x].v=0;
//             return ;
//         }
//         int mid=l+r>>1;
//         build(ls,l,mid);
//         build(rs,mid+1,r);
//         pushup(x);
//     }
//     void cha(int x,int l,int r,int k,int v){
//         if(l==r){
//             tr[x].v=v;
//             return ;
//         }
//         int mid=l+r>>1;
//         if(k<=mid)
//             cha(ls,l,mid,k,v);
//         else
//             cha(rs,mid+1,r,k,v);
//         pushup(x);
//     }
//     int qry(int x,int l,int r,int ql,int qr){
//         if(ql<=l && r<=qr)
//             return tr[x].v;
//         if(ql>r || qr<l)
//             return 0;
//         int mid=l+r>>1;
//         return max(qry(ls,l,mid,ql,qr),qry(rs,mid+1,r,ql,qr));
//     }
// }T[2];
signed main(){
    freopen("color.in","r",stdin);
    freopen("color.out","w",stdout);
    IOS();
    int t=1;
    cin>>t;
    a[0]=-1e18;
    while(t--){
        int n;
        cin>>n;
        memset(dp,0,sizeof(dp));
        memset(vis,0,sizeof(vis));
        memset(lst,0,sizeof(lst));
        a[n+1]=-1e18;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        int ans=0,n1=0;
        for(int i=1;i<=n;i++){
            if(a[i]==a[i-1])
                ans+=a[i];
            else
                a1[++n1]=a[i];
        }
        n=n1;
        // T[0].build(1,1,n);
        // T[1].build(1,1,n);
        for(int i=1;i<=n;i++){
            lst[i]=vis[a1[i]];
            vis[a1[i]]=i;
        }
        // for(int i=1;i<=n;i++){
        //     if(!lst[i]){
        //         dp[i][0]=dp[i][1]=0;
        //         continue;
        //     }
        //     int mx=T[0].qry(1,1,n,lst[i]+1,lst[i]+1);
        //     dp[i][1]=mx+a1[i];
        //     mx=T[1].qry(1,1,n,lst[i]+1,lst[i]+1);
        //     dp[i][0]=mx+a1[i];
        //     T[0].cha(1,1,n,i,dp[i][0]);
        //     T[1].cha(1,1,n,i,dp[i][1]);
        // }
        // int mx=0;
        // cout<<ans+max(T[0].qry(1,1,n,1,n),T[1].qry(1,1,n,1,n))<<endl;
        for(int i=1;i<=n;i++){
            dp[i][0]=dp[i-1][0];
            dp[i][1]=dp[i-1][1];
            if(!lst[i])
                continue;
            // cout<<i<<endl;
            for(int j=0;j<2;j++){
                int x=lst[i];
                dp[i][j]=max(dp[i][j],dp[x+1][j^1]+a1[i]);
            }
        }
        cout<<ans+max(dp[n][0],dp[n][1])<<endl;
    }
    return 0;
}